﻿Imports System.Data.SqlClient
Imports Dainfo.ControleEstoque.Model

Public Class DadosFornecedor
    Inherits AcessoDadosBase

    Public Function GetAll() As List(Of Fornecedor)
        Dim fornecedores As New List(Of Fornecedor)
        For Each row As DataRow In ExecuteReaderReturnTable(GetCommand("Select * From Fornecedor")).Rows
            Dim entidade As Fornecedor = GetEntidadeByTableRow(row)
            If Not entidade Is Nothing Then
                fornecedores.Add(entidade)
            End If
        Next
        Return fornecedores
    End Function

    Public Function GetById(ByVal codigo As Integer) As Fornecedor
        Dim entidade As Fornecedor = Nothing
        Dim cmd As SqlCommand = GetCommand("Select * From Fornecedor Where CodFornecedor = @Codigo")
        AddParameterToCmd(cmd, "@Codigo", codigo)
        Dim table As DataTable = ExecuteReaderReturnTable(cmd)
        If table.Rows.Count > 0 Then
            entidade = GetEntidadeByTableRow(table.Rows(0))
        End If
        Return entidade
    End Function

    Public Function GetByNome(ByVal nome As String) As List(Of Fornecedor)
        Dim fornecedores As New List(Of Fornecedor)
        Dim cmd As SqlCommand = GetCommand("Select * From Fornecedor Where RazaoSocial like '%' + @RazaoSocial + '%'")
        AddParameterToCmd(cmd, "@RazaoSocial", nome)

        For Each row As DataRow In ExecuteReaderReturnTable(cmd).Rows
            Dim entidade As Fornecedor = GetEntidadeByTableRow(row)
            If Not entidade Is Nothing Then
                fornecedores.Add(entidade)
            End If
        Next
        Return fornecedores
    End Function

    Public Sub Update(ByVal fornecedor As Fornecedor)
        Dim cmd As SqlCommand = GetCommand("Update Fornecedor Set RazaoSocial = @RazaoSocial, NomeContato = @NomeContato, CPF_CNPJ = @CPF_CNPJ, Produtos=@Produtos, " & GetContatoStringUpdate() & " Where CodFornecedor = @Codigo")
        AddParameterToCmd(cmd, "@Codigo", fornecedor.Codigo)
        AddParameterToCmd(cmd, "@RazaoSocial", fornecedor.RazaoSocial)
        AddParameterToCmd(cmd, "@NomeContato", fornecedor.NomeContato)
        AddParameterToCmd(cmd, "@CPF_CNPJ", fornecedor.CPF_CNPJ)
        AddParameterToCmd(cmd, "@Produtos", fornecedor.Produtos)
        PopulateCmdWithContatoValues(cmd, fornecedor)
        ExecuteScalar(cmd)
    End Sub

    Public Sub Delete(ByVal codigo As Integer)
        Dim cmd As SqlCommand = GetCommand("Delete From Fornecedor Where CodFornecedor=@Codigo")
        AddParameterToCmd(cmd, "@Codigo", codigo)
        ExecuteScalar(cmd)
    End Sub

    Public Sub Insert(ByVal fornecedor As Fornecedor)
        Dim cmd As SqlCommand = GetCommand("Insert into Fornecedor (RazaoSocial, CPF_CNPJ, Bairro, Cep, Cidade, Estado, Endereco, Telefone1, Telefone2, Email, Observacoes) Values (@RazaoSocial, @CPF_CNPJ, @Bairro, @Cep, @Cidade, @Estado, @Endereco, @Telefone1, @Telefone2, @Email, @Observacoes)")
        AddParameterToCmd(cmd, "@RazaoSocial", fornecedor.RazaoSocial)
        AddParameterToCmd(cmd, "@CPF_CNPJ", fornecedor.CPF_CNPJ)
        PopulateCmdWithContatoValues(cmd, fornecedor)
        ExecuteScalar(cmd)
    End Sub

    Private Function GetEntidadeByTableRow(ByVal row As DataRow) As Fornecedor
        Dim entidade As New Fornecedor
        entidade.Codigo = GetStringFromRow(row, "CodFornecedor")
        entidade.RazaoSocial = GetStringFromRow(row, "RazaoSocial")
        entidade.NomeContato = GetStringFromRow(row, "NomeContato")
        entidade.Produtos = GetStringFromRow(row, "Produtos")
        entidade.CPF_CNPJ = GetStringFromRow(row, "CPF_CNPJ")
        BuildContatoWithDataRow(row, entidade)
        Return entidade
    End Function


End Class
